package com.xiaoshuidi.cloud.module.finance.dal.dataobject.finance;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.xiaoshuidi.cloud.framework.mybatis.core.dataobject.DeptFilter;
import com.xiaoshuidi.cloud.framework.tenant.core.db.TenantBaseDO;
import com.xiaoshuidi.cloud.module.finance.enums.order.FinanceCommonStatusEnum;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 资金流水
 */
@TableName(value = "finance_money_flow", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class FinanceMoneyFlowDO extends TenantBaseDO implements DeptFilter {

    public FinanceMoneyFlowDO(String sourceBizId, String sourceBizType) {
        this.sourceBizId = sourceBizId;
        this.sourceBizType = sourceBizType;
    }

    @TableId
    private Long id;
    /**
     * 交易流水编号
     **/
    private String flowNo;
    /**
     * 商户线上交易订单号
     **/
    private String merchantOrderId;
    /**
     * 线下交易单号/线上支付第三方交易号
     **/
    private String tradeNo;
    /**
     * 线下交易账号(转账等)
     **/
    private String tradeAccount;
    /**
     * 流入0,流出1
     **/
    private Integer direction;
    /**
     * 交易来源, 线上(ONLINE)/线下(OFFLINE)
     **/
    private String sourceFrom;
    /**
     * 支付方式
     **/
    private String payMethod;
    /**
     * 交易金额
     **/
    private BigDecimal tradeAmount;
    /**
     * 优惠金额
     */
    private BigDecimal discount;
    /**
     * 租赁合同号
     **/
    private String roomContractNo;
    /**
     * 合同账单编号
     **/
    private String roomRentOrderNo;
    /**
     * 合同账单开始
     **/
    private LocalDate roomRentOrderStart;
    /**
     * 合同账单结束
     **/
    private LocalDate roomRentOrderEnd;
    /**
     * 部门/门店id
     **/
    private Integer storeId;
    /**
     * 门店名称
     **/
    private String storeName;
    /**
     * 公寓id
     **/
    private Long apartmentId;
    /**
     * 公寓名称
     **/
    private String apartmentName;
    /**
     * 房间id
     **/
    private Long roomId;
    /**
     * 房间名称
     **/
    private String roomName;
    /**
     * 承租人
     **/
    private String renter;
    /**
     * 租客姓名
     **/
    private String rentCustomer;
    /**
     * 交易对象姓名
     **/
    private String trader;
    /**
     * 主体0租客1企业
     */
    private Integer subject;
    /**
     * 经办人姓名
     **/
    private String operator;
    /**
     * 交易日期
     **/
    private LocalDateTime tradeTime;
    /**
     * 交易操作完成日期
     **/
    private LocalDateTime payTime;
    /**
     * 交易关联业务id
     */
    private String sourceBizId;
    /**
     * 交易关联业务类型
     * {@link com.xiaoshuidi.cloud.module.finance.enums.finance.SourceBizTypeEnum}
     */
    private String sourceBizType;
    /**
     * 备注
     **/
    private String remark;
    /**
     * 附件
     **/
    private String attachment;
    /**
     * 交易状态
     * {@link FinanceCommonStatusEnum}
     **/
    private String status;
    /**
     * 支付订单id
     **/
    private Long payOrderId;
    /**
     * 商户id
     **/
    private Long payMerchantId;
    /**
     * 应用id
     **/
    private Long payAppId;
    /**
     * 支付渠道id
     **/
    private Long payChannelId;

    /**
     * 勾核人
     **/
    private String checkedBy;

    /**
     * 驳回原因
     */
    private String rejectReason;

    @TableField(fill = FieldFill.INSERT)
    private Long deptId;

    public String rentOrderPeriod() {
        if (this.roomRentOrderStart != null && this.roomRentOrderEnd != null) {
            return String.format("%s-%s", roomRentOrderStart, roomRentOrderEnd);
        }
        return "-";
    }
}
